package com.spring.demo.controller;

import com.spring.demo.model.UserInfo;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@RequestMapping("/response")
@Controller
public class ResponseController {

    // 返回一个HTML界面
    @RequestMapping("/resp1")
    public String returnPage(){
        // 这里的/不能去掉
        return "/index.html";
    }

    // 一个类中，既有返回页面的方法又有返回数据的方法时使用@Controller
    // 并在返回数据的方法上加@ResponseBody（既是类注解又是方法注解）
    // 如果一个类全部返回数据，则可以直接使用@RestController，或者@Controller+@ResponseBody
    // 返回一个数据
    @ResponseBody
    @RequestMapping("/resp2")
    public String returnData(){
        // 这里的/不能去掉
        return "返回一个数据";
    }

    // 这里的HTML语句会被解析为对应界面，也就是返回了HTML代码片段
    @ResponseBody
    @RequestMapping("/resp3")
    public String returnHTML(){
        return "<h1>欢迎界面</h1>";
    }

    @ResponseBody
    @RequestMapping("/resp4")
    // 返回的是对象，但是Content-Type中没有对应的类型，因此会被解析成JSON
    public UserInfo returnJSON(HttpServletResponse  response){
        // 将请求的状态码设置为400
        // 状态码不影响页面的展示
        // response.setStatus(400);
        UserInfo user = new UserInfo("huozhe", 18,138);
        return user;
    }

    @ResponseBody
    @RequestMapping("/resp5")
    // 通过response设置Header
    public String setHeader(HttpServletResponse response){
        response.setHeader("myheader", "myvalue");
        return "Header设置成功";
    }
}
